#ifndef ROBOT_H
#define ROBOT_H

#include "GameObject.h"
#include "Direction.h"
#include "Movable.h"
#include "MoveAbility.h"
#include "Turnable.h"
#include "TurnAbility.h"
#include "Hittable.h"
#include "HitAbility.h"
#include "CheckpointReachable.h"
#include "CheckpointReachedAbility.h"
#include "RepairpointReachable.h"
#include "RepairpointReachedAbility.h"
#include "Droppable.h"
#include "DropAbility.h"


class Robot: public GameObject, public Movable, public Turnable, public Hittable, public CheckpointReachable, public RepairpointReachable, public Droppable
{
public:
	Robot();
	virtual ~Robot();


	// Test code
	void MoveTo(unsigned int cellX, unsigned int cellY);
	void SetTest(std::string t) { test = t; }
	std::string ToString() const { return test; }

	void MoveLeft();
	void MoveRight();
	void MoveUp();
	void MoveDown();
	void TurnLeft();
	void TurnRight();
	void Hit();
	void CheckpointReached();
	void RepairpointReached();
	void Drop();
	

protected:

private:
	// Test vars
	std::string test;


	Direction direction;
	MoveAbility* moveAbility;
	TurnAbility* turnAbility;
	HitAbility* hitAbility;
	CheckpointReachedAbility* checkpointreachedAbility;
	RepairpointReachedAbility* repairpointreachedAbility;
	DropAbility* dropAbility;

};

#endif //ROBOT_H
